using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._OrthoMapping
{
    /// <summary>
    /// <para>Update Interior Orientation</para>
    /// <para>Refines the interior orientation for each image in the mosaic dataset by constructing an affine transformation from a fiducial table.</para>
    /// <para>通过从基准表构造仿射变换来优化镶嵌数据集中每个影像的内部方向。</para>
    /// </summary>    
    [DisplayName("Update Interior Orientation")]
    public class UpdateInteriorOrientation : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public UpdateInteriorOrientation()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Input Mosaic Dataset</para>
        /// <para>The mosaic dataset that is created from scanned aerial photos using the scanned raster type or frame camera raster type.</para>
        /// <para>使用扫描栅格类型或帧相机栅格类型从扫描的航空照片创建的镶嵌数据集。</para>
        /// </param>
        public UpdateInteriorOrientation(object _in_mosaic_dataset)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Update Interior Orientation";

        public override string CallName => "management.UpdateInteriorOrientation";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _where_clause, _fiducial_table, _film_coordinate_system.GetGPValue(), _update_footprints.GetGPValue(), _out_mosaic_dataset];

        /// <summary>
        /// <para>Input Mosaic Dataset</para>
        /// <para>The mosaic dataset that is created from scanned aerial photos using the scanned raster type or frame camera raster type.</para>
        /// <para>使用扫描栅格类型或帧相机栅格类型从扫描的航空照片创建的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Query Definition</para>
        /// <para>A query definition string that defines a subset of rasters for computing fiducials.</para>
        /// <para>一个查询定义字符串，用于定义用于计算基准点的栅格子集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Fiducial Table</para>
        /// <para>The fiducial table created using the Compute Fiducials tool.</para>
        /// <para>使用计算基准点工具创建的基准表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Fiducial Table")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _fiducial_table { get; set; } = null;


        /// <summary>
        /// <para>Film Coordinate System</para>
        /// <para><xdoc>
        ///   <para>Defines the film coordinate system of the scanned aerial photograph. It is used in computing fiducial information and affine transformation construction.</para>
        ///   <bulletList>
        ///     <bullet_item>No change—Maintain the coordinate system of the mosaic dataset. Do not change the film coordinate system of the scanned aerial photograph. Maintain the coordinate system of the mosaic dataset.</bullet_item><para/>
        ///     <bullet_item>X right, Y up—The origin of the scanned photo's coordinate system is the center, and positive X points right and positive Y points up.</bullet_item><para/>
        ///     <bullet_item>X up, Y left—The origin of the scanned photo's coordinate system is the center, and positive X points up and positive Y points left.</bullet_item><para/>
        ///     <bullet_item>X left, Y down—The origin of the scanned photo's coordinate system is the center, and positive X points left and positive Y points down.</bullet_item><para/>
        ///     <bullet_item>X down, Y right—The origin of the scanned photo's coordinate system is the center, and positive X points down and positive Y points right.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>定义扫描航空照片的胶片坐标系。它用于计算基准信息和仿射变换构造。</para>
        ///   <bulletList>
        ///     <bullet_item>无更改 - 维护镶嵌数据集的坐标系。请勿更改扫描航拍照片的胶片坐标系。维护镶嵌数据集的坐标系。</bullet_item><para/>
        ///     <bullet_item>X 右，Y 朝上 - 扫描照片坐标系的原点是中心，正 X 指向右，正 Y 指向上方。</bullet_item><para/>
        ///     <bullet_item>X 向上，Y 向左 - 扫描照片坐标系的原点是中心，正 X 指向上方，正 Y 指向左侧。</bullet_item><para/>
        ///     <bullet_item>X 左，Y 向下 - 扫描照片坐标系的原点是中心，正 X 指向左，正 Y 指向向下。</bullet_item><para/>
        ///     <bullet_item>X 向下，Y 向右 - 扫描照片坐标系的原点是中心，正 X 指向下方，正 Y 指向右侧。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Film Coordinate System")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _film_coordinate_system_value _film_coordinate_system { get; set; } = _film_coordinate_system_value._NO_CHANGE;

        public enum _film_coordinate_system_value
        {
            /// <summary>
            /// <para>No change</para>
            /// <para>No change—Maintain the coordinate system of the mosaic dataset. Do not change the film coordinate system of the scanned aerial photograph. Maintain the coordinate system of the mosaic dataset.</para>
            /// <para>无更改 - 维护镶嵌数据集的坐标系。请勿更改扫描航拍照片的胶片坐标系。维护镶嵌数据集的坐标系。</para>
            /// </summary>
            [Description("No change")]
            [GPEnumValue("NO_CHANGE")]
            _NO_CHANGE,

            /// <summary>
            /// <para>X right, Y up</para>
            /// <para>X right, Y up—The origin of the scanned photo's coordinate system is the center, and positive X points right and positive Y points up.</para>
            /// <para>X 右，Y 朝上 - 扫描照片坐标系的原点是中心，正 X 指向右，正 Y 指向上方。</para>
            /// </summary>
            [Description("X right, Y up")]
            [GPEnumValue("X_RIGHT_Y_UP")]
            _X_RIGHT_Y_UP,

            /// <summary>
            /// <para>X up, Y left</para>
            /// <para>X up, Y left—The origin of the scanned photo's coordinate system is the center, and positive X points up and positive Y points left.</para>
            /// <para>X 向上，Y 向左 - 扫描照片坐标系的原点是中心，正 X 指向上方，正 Y 指向左侧。</para>
            /// </summary>
            [Description("X up, Y left")]
            [GPEnumValue("X_UP_Y_LEFT")]
            _X_UP_Y_LEFT,

            /// <summary>
            /// <para>X left, Y down</para>
            /// <para>X left, Y down—The origin of the scanned photo's coordinate system is the center, and positive X points left and positive Y points down.</para>
            /// <para>X 左，Y 向下 - 扫描照片坐标系的原点是中心，正 X 指向左，正 Y 指向向下。</para>
            /// </summary>
            [Description("X left, Y down")]
            [GPEnumValue("X_LEFT_Y_DOWN")]
            _X_LEFT_Y_DOWN,

            /// <summary>
            /// <para>X down, Y right</para>
            /// <para>X down, Y right—The origin of the scanned photo's coordinate system is the center, and positive X points down and positive Y points right.</para>
            /// <para>X 向下，Y 向右 - 扫描照片坐标系的原点是中心，正 X 指向下方，正 Y 指向右侧。</para>
            /// </summary>
            [Description("X down, Y right")]
            [GPEnumValue("X_DOWN_Y_RIGHT")]
            _X_DOWN_Y_RIGHT,

        }

        /// <summary>
        /// <para>Update Footprints</para>
        /// <para><xdoc>
        ///   <para>Generates or updates the footprints of the digital photos in the mosaic dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The footprints will be generated or updated.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The footprints will not be generated or updated. This is the default</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>生成或更新镶嵌数据集中数码照片的轮廓线。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将生成或更新封装。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会生成或更新封装。这是默认设置</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Footprints")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _update_footprints_value _update_footprints { get; set; } = _update_footprints_value._false;

        public enum _update_footprints_value
        {
            /// <summary>
            /// <para>UPDATE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("UPDATE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_UPDATE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_UPDATE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Mosaic Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_mosaic_dataset { get; set; }


        public UpdateInteriorOrientation SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}